Embodiments of the invention described relate to computer graphics, and in particular, to rendering.
Stated generally, computer graphics rendering is a process by which graphics instructions and data may be received and processed so that image data may be produced. This image data may then be sent to an input/output (I/O) device such as a display. Rendering creates data that may be displayed as an image.
The process of computer graphics rendering may include a number of discrete operations. For example, specific colors of an object or a background may need to be calculated. Texture may also need to be applied to a given surface. Another operation that may be performed in computer graphics rendering is the determination of whether a given object is in front of another object or background. If the foreground object is opaque, the background object may be obscured and the obscured portion of the background object may not need to be rendered. This depth analysis may generally be referred to as Z testing. In a rendered three-dimensional scene, the distance between an object or pixel and the hypothetical camera or the viewer's eye may be determined. Likewise, the comparable distance between the camera and a second, possibly obscuring object or pixel may be determined. These distances may be measured on a hypothetical Z axis, hence the term “Z testing.” If the closer object is opaque, the more distant pixel or object need not be rendered.
Note, however, that Z testing may be more complicated in certain implementations. While an object may be in the foreground, for instance, the object may be translucent or transparent. In such a case, the background object may have to be rendered. Such conditions may also be programmed into a Z test.
As mentioned above, the process of Z testing may be only one of several processes that take place during rendering. Moreover, images may have to be generated, modified, and displayed in near-real time. If so, rendering processes must take place efficiently and quickly, given that computer graphics rendering often represents the processing of large amounts of data. Design issues arise, therefore, as to how best to order these processes and how to implement them such that rendering throughput may be maximized.